﻿/**
 * jQuery ligerUI 1.1.9
 * 
 * http://ligerui.com
 * 
 * Author daomi 2012 [ gd_star@163.com ]
 * 
 */

(function($) {
	// 气泡,可以在制定位置显示
	$.ligerTip = function(p) {
		return $.ligerui.run.call(null, "ligerTip", arguments);
	};

	// 在指定Dom Element右侧显示气泡
	// target：将ligerui对象ID附加上
	$.fn.ligerTip = function(options) {
		this.each(function() {
			var p = $.extend({}, $.ligerDefaults.ElementTip, options || {});
			p.target = p.target || this;
			// 如果是自动模式：鼠标经过时显示，移开时关闭
			if (p.auto || options == undefined) {
				if (!p.content) {
					p.content = this.title;
					if (p.removeTitle)
						$(this).removeAttr("title");
				}
				p.content = p.content || this.title;
				$(this).bind('mouseover.tip', function() {
					p.x = $(this).offset().left + $(this).width()
							+ (p.distanceX || 0);
					p.y = $(this).offset().top + (p.distanceY || 0);
					$.ligerTip(p);
				}).bind('mouseout.tip', function() {

							var tipmanager = $.ligerui.managers[this.ligeruitipid];
							if (tipmanager) {
								tipmanager.remove();
							}
						});
			} else {
				if (p.target.ligeruitipid)
					return;
				p.x = $(this).offset().left + $(this).width()
						+ (p.distanceX || 0);
				p.y = $(this).offset().top + (p.distanceY || 0);
				p.x = p.x || 0;
				p.y = p.y || 0;
				$.ligerTip(p);
			}
		});
		return $.ligerui.get(this, 'ligeruitipid');
	};
	// 关闭指定在Dom Element(附加了ligerui对象ID,属性名"ligeruitipid")显示的气泡
	$.fn.ligerHideTip = function(options) {
		return this.each(function() {
			var p = options || {};
			if (p.isLabel == undefined) {
				// 如果是lable，将查找指定的input，并找到ligerui对象ID
				p.isLabel = this.tagName.toLowerCase() == "label"
						&& $(this).attr("for") != null;
			}
			var target = this;
			if (p.isLabel) {
				var forele = $("#" + $(this).attr("for"));
				if (forele.length == 0)
					return;
				target = forele[0];
			}
			var tipmanager = $.ligerui.managers[target.ligeruitipid];
			if (tipmanager) {
				tipmanager.remove();
			}
		}).unbind('mouseover.tip').unbind('mouseout.tip');
	};

	$.fn.ligerGetTipManager = function() {
		return $.ligerui.get(this);
	};

	$.ligerDefaults = $.ligerDefaults || {};

	// 隐藏气泡
	$.ligerDefaults.HideTip = {};

	// 气泡
	$.ligerDefaults.Tip = {
		content : null,
		callback : null,
		width : 150,
		height : null,
		x : 0,
		y : 0,
		appendIdTo : null, // 保存ID到那一个对象(jQuery)(待移除)
		target : null,
		auto : null, // 是否自动模式，如果是，那么：鼠标经过时显示，移开时关闭,并且当content为空时自动读取attr[title]
		removeTitle : true
		// 自动模式时，默认是否移除掉title
	};

	// 在指定Dom Element右侧显示气泡,通过$.fn.ligerTip调用
	$.ligerDefaults.ElementTip = {
		distanceX : 1,
		distanceY : -3,
		auto : null,
		removeTitle : true
	};

	$.ligerMethos.Tip = {};

	$.ligerui.controls.Tip = function(options) {
		$.ligerui.controls.Tip.base.constructor.call(this, null, options);
	};
	$.ligerui.controls.Tip.ligerExtend($.ligerui.core.UIComponent, {
		__getType : function() {
			return 'Tip';
		},
		__idPrev : function() {
			return 'Tip';
		},
		_extendMethods : function() {
			return $.ligerMethos.Tip;
		},
		_render : function() {
			var g = this, p = this.options;
			var tip = $('<div class="l-verify-tip"><div class="l-verify-tip-corner"></div><div class="l-verify-tip-content"></div></div>');
			g.tip = tip;
			g.tip.attr("id", g.id);
			if (p.content) {
				$("> .l-verify-tip-content:first", tip).html(p.content);
				tip.appendTo('body');
			} else {
				return;
			}
			tip.css({
						left : p.x,
						top : p.y
					}).show();
			p.width
					&& $("> .l-verify-tip-content:first", tip).width(p.width
							- 8);
			p.height && $("> .l-verify-tip-content:first", tip).width(p.height);
			eee = p.appendIdTo;
			if (p.appendIdTo) {
				p.appendIdTo.attr("ligerTipId", g.id);
			}
			if (p.target) {
				$(p.target).attr("ligerTipId", g.id);
				p.target.ligeruitipid = g.id;
			}
			p.callback && p.callback(tip);
			g.set(p);
		},
		_setContent : function(content) {
			$("> .l-verify-tip-content:first", this.tip).html(content);
		},
		remove : function() {
			if (this.options.appendIdTo) {
				this.options.appendIdTo.removeAttr("ligerTipId");
			}
			if (this.options.target) {
				$(this.options.target).removeAttr("ligerTipId");
				this.options.target.ligeruitipid = null;
			}
			this.tip.remove();
		}
	});
})(jQuery);